<?php

namespace Model;

session_start();

class LoginHandler {
	
	//Privat strängar
	private $LoginSession = "LoginSession";
	private $saltString = "@3Qaq7vx";
	private $db = NULL;
    private $dbt = NULL;
		
	//Konstrukterar databas & DBtabell instans
    public function __construct(Database $db) 
    {
        $this->db =$db;
		$this->dbt = new \Model\DBTables();	
    }
	
	//Retunerar TRUE om inloggningssessionen är satt
	public function IsLoggedIn() 
	{
		if (isset($_SESSION[$this->LoginSession]))
		{
			return TRUE;	
		}		
	}

	//Retunerar TRUE om angivna uppgifter finns sparade i databasen, annars FALSE (Loggar in)
	public function DoLogin($userName, $password) 
	{
		$dbt = new \Model\DBTables();
	
		//Krypterar lösenordet
		$encPassword = $this->EncryptPassword($password);
		
		//Hämtar id från den användare där uppgifterna stämmer överens
		$sql = "SELECT userId FROM " . $dbt->userTable . " WHERE name = ? AND password = ? LIMIT 1";
		
		$stmt = $this->db->Prepare($sql);
		
		$stmt->bind_param("ss", $userName, $encPassword);
							
		$userId = $this->db->SelectSingleValue($stmt); 
		
		//Sparar anv-id i inloggningssessionen, om sådan returnerades 
		if($userId != 0)
		{
			$_SESSION[$this->LoginSession] = $userId;
			return TRUE;		 	
		}	
		
		return FALSE;
	}
	
	//Tömmer inloggningssessionen (Loggar ut)
	public function DoLogout() 
	{	
		unset($_SESSION[$this->LoginSession]);
	}

	//Retunerar anv-id via session, annars NULL
	public function GetUserIdBySession()
	{
		if($this->IsLoggedIn() == TRUE)
		{
			return $_SESSION[$this->LoginSession];			
		}
		
		return NULL;	
	}

	//Retunerar en kryptering av medskickat lösenord
	public function EncryptPassword($password)
	{			
		$salt = $this->saltString;	
		$md5 = md5($salt . $password);
		
		return $md5;
	}		
	
	//TESTFUNKTION
	public function Test() 
	{
		//Loggar ut
		$this->DoLogout();
		
		//Testar IsLoggedIn
		if ($this->IsLoggedIn() == TRUE) 
		{
		  	echo "Fel: 'IsLoggedIn' Användare är fortfarande inloggad.";
			return FALSE;
		} 
								
		//Testar DoLogin med felaktigt anv-namn & lösenord.
		if ($this->DoLogin("wrongUsername","wrongPass") == TRUE) 
		{
		  	echo "Fel: 'DoLogIn' Användaren kunde logga in med felaktiga uppgifter.";
			return FALSE;
		}
					
		//Testar DoLogin med felaktigt lösenord.
		else if ($this->DoLogin("userOne","wrongPass") == TRUE) 
		{
		  	echo "Fel: 'DoLogIn' Användaren kunde logga in med felaktigt lösenord.";
			return FALSE;
		}	
		
		//Testar DoLogin med korrekta uppgifter. Vi ska loggas in.					
		else if ($this->DoLogin("adam","123456") == FALSE) 
		{
		  	echo "Fel: 'DoLogIn' Användaren kunde inte logga in med korrekta uppgifter.";
			return FALSE;
		}	
						
		//Testar om vi är inloggade.
		if ($this->IsLoggedIn() == FALSE) 
		{
		  	echo "Fel: 'IsLoggedIn' Användaren loggades inte in";
			return FALSE;
		}
				
		//Loggar ut.
		$this->DoLogout();		
		
		//Alla tester är OK
		return TRUE;	
				
	}				
	
}

?>
  